SEO: consolidate BaaS hub, redirects, comparison content#2920
SEO: consolidate BaaS hub, redirects, comparison content#2920
Conversation
Rename blog slug to /blog/post/backend-as-a-service, rewrite article for comparison intent, add metaTitle and FAQ schema in Post layout, 308 redirects from overlapping URLs, remove duplicate posts, add best-platforms satellite post, and internal links from docs and related blog posts. Made-with: Cursor
Greptile SummaryThis PR consolidates overlapping BaaS content into a single hub post (
Confidence Score: 4/5Safe to merge after fixing the TypeScript type error in Post.svelte; all redirects, content changes, and new posts are structurally sound. One P1 TypeScript error (passing a possibly-undefined value to a function expecting a non-optional array) will fail strict type-checking. All other changes are editorial, redirect configuration, or additive content with no logic defects. src/markdoc/layouts/Post.svelte — the Important Files Changed
Reviews (1): Last reviewed commit: "SEO: consolidate BaaS hub, redirects, co..." | Re-trigger Greptile |
| {#if faqs?.length} | ||
| <!-- eslint-disable-next-line svelte/no-at-html-tags--> | ||
| {@html getInlinedScriptTag(createFaqSchema(faqs))} | ||
| {/if} |
There was a problem hiding this comment.
TypeScript type error:
faqs not narrowed inside {#if faqs?.length}
faqs is declared as { question: string; answer: string }[] | undefined, but TypeScript's optional-chain guard (faqs?.length) does not narrow the type of faqs itself inside the block — it stays T[] | undefined. Passing it to createFaqSchema, which expects a non-optional Array<…>, is a type error that will fail svelte-check. Use a non-null assertion or refactor the guard to a simple {#if faqs} check (which does narrow in Svelte templates).
| {#if faqs?.length} | |
| <!-- eslint-disable-next-line svelte/no-at-html-tags--> | |
| {@html getInlinedScriptTag(createFaqSchema(faqs))} | |
| {/if} | |
| {#if faqs?.length} | |
| <!-- eslint-disable-next-line svelte/no-at-html-tags--> | |
| {@html getInlinedScriptTag(createFaqSchema(faqs!))} | |
| {/if} |
|
|
||
| **Supabase** centers on **PostgreSQL**: SQL-first workflows, Row Level Security, and Edge Functions (TypeScript). You can self-host, but operational complexity is higher than single-console BaaS setups; some features differ between cloud and self-hosted tiers. | ||
|
|
||
| **Appwrite** is **Apache-licensed**, ships as a **single platform** (auth, databases, storage, functions, messaging, realtime, sites), and targets teams that want **managed cloud or self-host** with **API-level portability** and less vendor-specific query DSL than Firestore-only stacks. |
There was a problem hiding this comment.
We use the BSD 3-Clause and not Apache, right?
Rename blog slug to /blog/post/backend-as-a-service, rewrite article for comparison intent, add metaTitle and FAQ schema in Post layout, 308 redirects from overlapping URLs, remove duplicate posts, add best-platforms satellite post, and internal links from docs and related blog posts.
Made-with: Cursor
What does this PR do?
(Provide a description of what this PR does.)
Test Plan
(Write your test plan here. If you changed any code, please provide us with clear instructions on how you verified your changes work.)
Related PRs and Issues
(If this PR is related to any other PR or resolves any issue or related to any issue link all related PR and issues here.)
Have you read the Contributing Guidelines on issues?
(Write your answer here.)